#pragma once
#include <Ice/BuiltinSequences.ice>

module Robot {
    interface Script{
        void Play(string strPath);  //strPath需要执行的机器人系统上的py文件路径
        void PlayContent(string strScript);  //strScript脚本文件内容
        void Stop(); 
        bool IsPlaying();
        string GetPath();  //当前执行py文件的路径
        string ListScripts();//获取机器人脚本列表
    };

    interface Json{
        bool Load(string strPath);  //需要执行的机器人系统上的json文件路径
        void CallByName(string strName);  //json文件中定义的key
        void CallByClass(string strClassName);  //strClassName为json文件中key的"_"前字段
        void CallByContent(string strArray);  //strArray一组需要执行的动作内容
        void Stop();
        bool IsPlaying();
        void AutoPlay(); // 开启自动配动作功能
        void List(out Ice::StringSeq strList);  //当前加载json文件的所有动作
    };

    interface Motor{
        // 原始串口控制
        void SerialWrite(Ice::ByteSeq bHexData);  //bHexData 16进制串口数据


        // 头部电机
        void HeadEnable(bool bLR, bool bUD);  //上电
        void HeadLrInit();
        void HeadUdInit();
        void HeadLrAngle(int nAngle, int nSpeed);  //(v1签到版nAngle(5,64,123)) nAngle(-59 0 59)  nSpeed(1-10)
        void HeadUdAngle(int nAngle, int nSpeed);  //(v1签到版nAngle(1,20,30))  nAngle(-19 0 10)  nSpeed(1-10)


        // 左手电机
        void HandLEnable(bool bSwing, bool bExpand); //上电
        void HandLSwingInit();
        void HandLExpandInit();
        void HandLSwingAngle(int nAngle, int nSpeed);  //(v1签到版nAngle(2,48,228)) nAngle(-46 0 180) nSpeed(1-10)
        void HandLExpandAngle(int nAngle, int nSpeed); //(v1签到版nAngle(2,64,150)) nAngle(2 88 150)  nSpeed(1-10)


        // 右手电机
        void HandREnable(bool bSwing, bool bExpand); //上电
        void HandRSwingInit();
        void HandRExpandInit();
        void HandRSwingAngle(int nAngle, int nSpeed);  //(v1签到版nAngle(2,48,228)) nAngle(-46 0 180)   nSpeed(1-10)
        void HandRExpandAngle(int nAngle, int nSpeed); //(v1签到版nAngle(2,64,150)) nAngle(2 88 150)   nSpeed(1-10)


        // 轮子
        void WheelEnable(bool bEnable); //上电
        void WheelStop(bool bSlow);
        void WheelRotate(int nAngle, int nSpeed); //nSpeed(1-10)
        void WheelRun(int nDistance, int nSpeed); //nDistance=10=1cm nSpeed(1-10)

        //差速控制(bLeftUP(true正向\false反向),nLeftSpeed(1-100),bRight(true正向\false反向),nRightSpeed(1-100))
        void WheelRunDiff(bool bLeftUP, int nLeftSpeed, bool bRight, int nRightSpeed);


        //LED
        void HeadEye(int nIndexF, int nIndexB);  //支持V1、V5A   --2017.3.8
        void HeadEye2(int nDelay, bool bR, bool bG, bool bB);  //nDelay [0,10], 支持V5B    --2017.3.8
        void HeadEar(int nDelay, bool bR, bool bG, bool bB);  //nDelay [0,10], 支持V5A  --2017.3.8
        void BodyLed(int nDelay, bool bR, bool bG, bool bB); // nDelay [0,10]
        void TouchSet(bool bFlash, int nColor, int nFPS);  


        // Sensor
        // 电池信息
        void SensorBatteryValue(out Ice::IntSeq nValList);  //不可用
        // 声波传感器
        void SensorSonicValue(out Ice::IntSeq nValList); //支持V1、V5A
        // 红外传感器
        void SensorInfraredValue(out Ice::IntSeq nValList); //支持V5A
        // 码盘数据
        //void SensorWheelValue(out Ice::IntSeq nValList); //不可用

        // 避障功能
        void SetProtect(bool bOpen); //支持V5A
        bool GetProtect();  //支持V5A
    };
    interface Audio{
        // 语音合成
        //strTxt说话内容、strSpeaker发音人、nSpeed语速0-100，nPitch语调0-100
        void TtsPlayParams(string strTxt, string strSpeaker, int nSpeed, int nPitch);  
        void TtsPlay(string strTxt);
        void TtsPlayParams2(string strTxt, string strSpeaker, int nSpeed, int nPitch, int nPlayPriority);  
        void TtsPlay2(string strTxt, int nPlayPriority);
        void TtsPlayFile(string strPath);  //strPath对应机器人系统上路径的科大讯飞合成的媒体文件
        void TtsSetVolume(int nVal);  //nVal音量0-100
        void TtsStop();
        void TtsStop2(int nPlayPriority);
        bool TtsIsPlaying();
        // 语音识别
        void AsrBuild(string strUtf8);  //strUtf8 BNF语法内容
        void AsrSetGramma(string name);  //设置BNF语法名称
        void AsrStart(int nMaxDelayMs,bool bIsOffline, optional(1) bool bIsChinese);//nMaxDelayMs语音识别的时间毫秒,bIsOffline(true离线识别,false在线识别) bIsChinese(true中文识别,false英文识别,离线不支持英文识别)              
        void AsrStop();  //停止识别，立即返回结果
        void AsrAnswerEnable(bool bEnable);//设置语音回答开关
        void AsrSetTimeOut(int nTimeDelayS);//设置麦克风矩阵激活后的超时时间(0 关闭超时休眠，大于0 设置超时休眠时间)
        // 音乐
        void MediaPlay(string strPath);  //strPath机器人系统上的音频文件
        void MediaSetVolume(int nVal);
        void MediaStop();
        bool MediaIsPlaying();
        //麦克风阵列
        void MicReset();//复位麦克风板
        void MicSet(int nVal);//设置麦克风板的收音增强方向，nVal值:0中间 1右边 2左边

    };
    // 后屏接口
    interface ScreenEx{
		
		//C++版本接口，功能与上述相同
		void ShowRepeatDirCPP(int nDelay, string strDir);  // 自动重复播放图片文件夹， nDelay 单位s
		void ShowRepeatDirAndSetVolumnCPP(int nDelay, string strDir,int volumn);
        void ShowPicCPP(int nDelay, string strPath); // nDelay 单位s
		void ShowGifCPP(int nDelay, string strPath); // nDelay 单位s
        void ShowVideoCPP(int nDelay, string strPath, int nVol); // nDelay 单位s
		void ShowVideoVipCPP(int nType,string strName);	

		//欢乐时光接口
		/*
		void HHSetBackground(string filePath,bool loop);				//删除旧的HH窗口，显示新的HH窗口
																		//可指定背景为：图片，gif，视频,loop为true指定gif，video循环播放，false时仅播放一次，且停留在最后一帧

		void HHShowImage(string filePath,int id);						//在当前HH窗口中，添加一张图片
																		//id号对应特定的x,y,width,height   

        void HHShowCircleImage(string filePath,string name,int id);	  	//1、2、3、4
		void HHShowRatio (int manNum, int womanNum);
		void HHAddToSignInWall(string json);							//json为一串名字序列
		void HHShowVCR(string path);
		void HHPlayVCR();
		void HHPlayBarrage(string json);								//json为{图片，名字，内容}序列
		bool HHVCRIsFinished();
		void HHShowGif(string path,int id,bool loop); 	 				//1，2  loop为true指定gif循环播放，false时仅播放一次，且停留在最后一帧
		void HHShowLootWinner(string path,string name);					// 显示之后，停特定时间，翻动
		void HHShowAllLootWinners (string json);						//显示所有获奖者
		void HHShowWish(string path,string to,string content,string from,int type);
		void HHShowMSGWall(string json); 								//后屏代码存在误差
		void HHShowCountDown(int sec);
		void HHShowAward(string json,int sec);	*/

		//会议时光接口
		void EnterCeremonyInit(string firmDesc, string firmLogo,string backgroundPic,int nType); //
		void EnterCeremonyAddGuest(string papers,string name,string contents,string text, int nGstType);	//入场欢迎仪式来人签到
		bool EnterCeremonyAddIsShowEnd();								//欢迎动画是否完成
		bool EnterCeremonyAddVipIsShowEnd();							//vip欢迎动画是否完成
		void EnterCeremonyBroadcastTest(string area,string text,string totalText,string title,int type);					//广播
	//	void EnterCeremonyPauseHide();									//欢迎仪式暂停（隐藏）
		void EnterCeremonyContinueShow();							    //欢迎仪式继续（显示）
		void EnterCeremonyUnInit();									    //释放资源
		
		void OpeningCeremonyInit(string backgroundPic);					//初始化倒计时：背景图片s
		void OpeningCeremonTTShow(string backgroundPic, string text);	//显示倒计时TTS
		void OpeningCeremonyVideo(string video, string backgroundPic);	//播放视频
		bool OpeningCeremonyVideoIsShowEnd();							//播放视频是否结束
		void OpeningCeremonyUnInit();									//释放资源
		//投票接口
		void votePageInit(string background,string title,string contents,string QRPic);
		void votePageAddMessage(string pic,string contents);
		void votePageAddData(string json,int nCount);
		//拆出欢乐时光接口
		void HHSetBackground(string filePath,bool loop);				//删除旧的HH窗口，显示新的HH窗口
																		//可指定背景为：图片，gif，视频,loop为true指定gif，video循环播放，false时仅播放一次，且停留在最后一帧

		void HHShowImage(string filePath,int id);						//在当前HH窗口中，添加一张图片
																		//id号对应特定的x,y,width,height   

		void HHShowVCR(string path);
		void HHPlayBarrage(string json);								//json为{图片，名字，内容}序列
		bool HHVCRIsFinished();
		void HHShowWish(string path,string to,string content,string from,int type);
		void HHShowMSGWall(string json); 								//
    };
    interface Config{
        // 系统设置
        void SetSystemVolume(int nVal); // nVal -2取消静音,-1静音, 0-100
        int GetSystemVolume();  //获取系统音量
        void SetSystemCmd(string strCmd);  //发送CMD指令

    };
    interface Pub{
        void Notify(string strType, string strMsg);  //机器人端发送的消息，例如触摸回馈
        bool NotifyCloud(string strMsg);//机器人端向公网发送的消息
        void NotifyContral(bool bEnable);//公网发送的开关
	void NotifyTitleCloud(string strTitle,string strMsg);//机器人端向公网发送vip消息,strTitle为主题的最后一级
    };
    interface Session{
        void List(out Ice::StringSeq sList); //获取当前远程端连接的会话列表
    };
    interface Motion{
        void SetState(bool bPause); //设置 pause or work
        bool State(); // 获取pause or work
    };
    interface Live{
        void RobotRecvStart();  //机器人端开启接受远程控制端发送的音视频
        void RobotRecvStop();  //机器人端停止接受远程控制端发送的音视频
        bool RobotRecvState();//查询机器人端拉取音视频的状态 返回值：true开启接收 false停止接收

        void RobotPushStart();//开启机器人端推送功能
        void RobotPushStop();//关闭机器人端推送功能
        bool RobotPushState();//查询机器人端推送状态 返回值：true开启推送 false停止推送
    };
    interface FileMgr{
        string GetDirPath();  //机器人上保存的上传文件的路径
        void List(out Ice::StringSeq sList); //调用后sList的值为文件名列表
        void Delete(string strFullName);  //需要删除的文件名称，带后缀，不需要带路径
        
        int SendStart(string strName); //开始上传文件 strName保存的文件名 返回值为SendFile函数所需的文件句柄
        bool SendFile(int nHandle, Ice::ByteSeq bSeq, bool bEnd); // nHandle为SendStart返回的文件句柄 bSeq写入文件内容 bEnd是否结束上传
    };
};
